home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-06-25 | 26.0 KB | 1,186 lines |
- ****************************************************************************
- *
- * TSSREPT.PRG
- * Procedure file for time sheet / payroll reports
- * ver 1.5
- * Called by TSS.PRG
- * see comments and chg history in TSS.PRG
- *
- * mod 07/85 for clipper
- * mod 09/85 for floppy usage
- * mod 03/14/86 to change report title
- * mod 03/25/86 to delete monthly report summary
- * mod 03/26/86 to change contract report to handle proposal numbers
- * mod 06/25/86 changed REPT1D total routine. The old routine did not
- * include the last record if it was a single key entry.
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT
-
- REPLY=' '
- CLEAR
- TEXT
- Time Sheet / Payroll Report Program
-
- The reports should only be printed after the input data has been
- verified. Failure to verify the input data will result in inaccurate
- report data.
-
- The reports require you to input the start date and the stop date
- for the pay period that will appear on the top of each report page.
-
- The number of hours that are in the pay period should also be entered.
-
- ENDTEXT
- @ 20,0
- ACCEPT 'Continue with report program (Y/N) ' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ENDIF
- SELECT E
- IF .NOT. VERIFY
- DO REPT0A && not verified warning
- IF REPLY#'Y'
- RETURN
- ENDIF
- ENDIF
-
- * reports use various files, so close everything and start from scratch
- * to help keep track
- *
- CLOSE DATA
- CLOSE INDEX
-
- DO REPT0B && get report parameters
-
- START=DTOC(RP_START)
- STOP=DTOC(RP_STOP)
- HRS_PERIOD=RP_HOURS
-
- USE && close tssstat.dbf
-
- * define here to behave like public
- *
- STORE 0 TO DEPT_TOT,EMPL_TOT,CNTR,CON_CNTR,DEPT_CNTR,ROW,PAGE
- STORE ' ' TO CON_10,CON_11,CON_12,CON_12,CON_13,CON_14,CON_15,CON_16,CON_17
- STORE ' ' TO CON_18,CON_19,CON_20,CON_21,CON_22,CON_23,CON_24,CON_25
- STORE ' ' TO CON_26,CON_27,CON_28,CON_29,CON_30,CON_31,CON_32,CON_33
- STORE ' ' TO CON_34,CON_35,CON_36,CON_37,CON_38,CON_39
- STORE ' ' TO CON_LIST,DEPT_LIST,DEPT_KEY,EMPL_KEY,CON_KEY
- STORE ' ' TO RA_1,RA_2,RA_3,RA_4,RA_5,RA_6,RA_7
- BORDER=REPLICATE('-',P_WIDTH)
- SELECT A
- SEL=' '
- DO WHILE SEL#'0'
- CLEAR
- TEXT
- Time Sheet/Payroll Report Menu
-
-
- 1. Time Sheet Report
- 2. Department Charge List
- 3. Contract Charge List
- 4. Employee Charge List
-
- 0. Return to Main Menu
-
- ENDTEXT
- SEL=' '
- @ 22,0 SAY 'Enter Selection ' GET SEL
- READ
- DO CASE
- CASE SEL='1'
- DO REPT1
- CASE SEL='2'
- DO REPT2
- CASE SEL='3'
- DO REPT3
- CASE SEL='4'
- DO REPT4
- ENDCASE
- ENDDO
- SEL=' '
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- * not verified warning
- *
- PROCEDURE REPT0A
-
- CLEAR
- TEXT
- Excuse me !!!!!
-
- Did you know that the input data has not been verified ?
-
- You should not print out any reports until the input data has been
- VERIFIED.
-
- Go directly to JAIL.
-
- Do not pass GO and do not collect $200.
-
- ENDTEXT
- @ 20,0
- ? BELL
- ACCEPT 'Still continue with report program (Y/N) ' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ELSE
- @ 20,0 CLEAR
- @ 22,0 SAY 'OK ! You are on your own now........'
- C=0
- DO WHILE C<3
- ?? 'snicker.... '
- D=1
- DO WHILE D<DELAY
- D=D+1
- ENDDO
- C=C+1
- ENDDO
- ENDIF
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- * get report parameters
- *
- PROCEDURE REPT0B
-
- * display/edit current report parameters
- *
- CLEAR
- SELECT A
- USE &TSSSTAT
- TEXT
- The reports will use the following information.
-
- Please correct it now if it needs it.
-
- The new information will be stored and displayed next time.
-
- ENDTEXT
- @ 18,0 SAY 'Report start date ' GET RP_START
- @ 19,0 SAY 'Report stop date ' GET RP_STOP
- @ 20,0 SAY 'Hours per period ' GET RP_HOURS
- READ
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1
- *
- * Generate Time sheet report
- *
-
- * TSSINPUT.dbf - for input data
- * TSSCONTR.dbf - for contract data input
- * TSSDEPT .dbf - for dept data input
- * uses: TSSF01 .dbf - main report data file
- * TSSF01A .dbf - temp. file
- * TSSF01B. dbf - temp. file
- * TSSF01C. dbf - contract summary file
- * TSSF01D. dbf - department summary file
- *
-
- CLEAR
- TEXT
- Report 1 - Time Sheet Report
-
- This report will :
-
- 1. Report the time charged to all contracts in the Report Contract List.
- All contracts not in the list will be placed into direct.
-
- 2. All entries will be stripped of phase. All contract phases will be totaled
- into one contract entry per employee per department.
-
- 3. Employee names will be provided based on the employee number.
-
- 4. A summary page is provided that displays the data in an hours by department
- by contract matrix.
-
- ENDTEXT
- ACCEPT 'Continue with report (Y/N)' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ENDIF
-
- ERROR=.F.
-
- ?
- ? 'REPT 1 generation started....'
- ?
-
- * Generate contract list
- DO REPT1A
-
- * Generate department list
- DO REPT1B
-
- IF ERROR
- RETURN
- ENDIF
-
- * Contract organization
- DO REPT1C
- * total all entries for same key into one entry
- DO REPT1D
- * Get employee names
- DO REPT1E
- * Generate Report Heading array for first part of report
- DO REPT1F
- * Time sheet report - part A
- DO REPT1G
- * Time sheet report - part B
- DO REPT1H
-
- CLOSE DATA
- CLOSE INDEX
-
- DELETE FILE &TSSF01A..DBF
- DELETE FILE &TSSF01B..DBF
- DELETE FILE &TSSF01C..DBF
- DELETE FILE &TSSF01D..DBF
- DELETE FILE &TSSF01..&NDX
- DELETE FILE &TSSF01A..&NDX
-
- SELECT A
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1A
- *
- * Generate contract list
- *
- SELECT A
- USE &TSSRCTRL INDEX &TSSRCTRL
- CON_CNTR=1
- CON_LIST=' '
- DO WHILE .NOT. EOF()
- CON_LIST=CON_LIST+CONTRACT+' '
- CON_CNTR=CON_CNTR+1
- SKIP
- ENDDO
-
- MAX=INT((P_WIDTH-24)/7)
- IF CON_CNTR-1>MAX
- CLEAR
- TEXT
- Hey, Dummy !!!
- There are too many contracts in the report contract list.
- Shorten the list or forget it !
- ENDTEXT
- ? 'A max of '+STR(MAX,2)+' is allowed.'
- ERROR=.T.
- WAIT
- ELSE
- IF CON_CNTR<2
- ? 'Contract count ERROR. ('+STR(CON_CNTR-1,1)+')'
- ERROR=.T.
- WAIT
- ELSE
- ? 'There are '+STR(CON_CNTR-1,2)+' contracts.'
- CON_LIST=CON_LIST+'\TOTALS'
- ENDIF
- ENDIF
- USE
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1B
- *
- * Generate department list
- * DEPT--->DEPT_LIST
- *
- USE &TSSDEPT INDEX &TSSDEPT
- DEPT_CNTR=1
- DEPT_LIST=' '
- DO WHILE .NOT. EOF()
- DEPT_LIST=DEPT_LIST+DEPT+' '
- DEPT_CNTR=DEPT_CNTR+1
- SKIP
- ENDDO
-
- MAX=INT((P_WIDTH-50)/10)-1
- * check to see if all depts will fit on paper width
- IF DEPT_CNTR-1>MAX
- CLEAR
- TEXT
- Hey, Dummy !!!
- There are too many departments in the Master department file.
- I can't fit that many on the page width you want
- Shorten the list or forget it !
- ENDTEXT
- ? 'A max of '+STR(MAX,2)+' is allowed.'
- ERROR=.T.
- WAIT
- ELSE
- IF DEPT_CNTR<2
- ? 'Department count ERROR. ('+STR(DEPT_CNTR-1,1)+')'
- ERROR=.T.
- WAIT
- ELSE
- ? 'There are '+STR(DEPT_CNTR-1,2)+' departments.'
- DEPT_LIST=DEPT_LIST+'TOTAL '
- ENDIF
- ENDIF
- USE
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1C
- *
- * contract organization
- *
- SELECT A
- USE &TSSF01
- COPY STRU TO &TSSF01A
-
- USE &TSSF01A
- APPEND FROM &TSSINPUT
-
- REPL ALL CONTRACT WITH '\PROPOS' FOR CONTRACT='P'
- REPL ALL CONTRACT WITH '\DIRECT' FOR CONTRACT#'\' .AND. ;
- AT(CONTRACT,CON_LIST)=0
-
- INDEX ON DEPT+EMPL_NO+CONTRACT TO &TSSF01A
- GOTO TOP
- COPY STRU TO &TSSF01B
-
- SELECT B
- USE &TSSF01
- ZAP
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- * total all entries for same key into one entry
- *
- PROCEDURE REPT1D
-
- * Entry:
- * SELECT A = TSSF01A INDEX TSSF01A
- * SELECT B = TSSF01 - ZAPPED
- *
- * Exit:
- * TSSF01 totaled by DEPT+EMPL_NO+CONTRACT
-
- SELECT A && USE TSSF01A INDEX TSSF01A
-
- M_DEPT=DEPT
- M_EMPL=EMPL_NO
- M_CONT=CONTRACT
- M_HOURS=0
- GOTO TOP
- KEY=DEPT+EMPL_NO+CONTRACT
- DO WHILE .NOT. EOF()
-
- * accumulate while the key remains the same
- *
- DO WHILE DEPT+EMPL_NO+CONTRACT=KEY
- M_HOURS=M_HOURS+HOURS
- SKIP
- ENDDO
-
- * key has changed, save current accumulated total into
- * total file.
- *
- SELECT B && USE TSSF01
- APPEND BLANK
- REPL DEPT WITH M_DEPT
- REPL EMPL_NO WITH M_EMPL
- REPL CONTRACT WITH M_CONT
- REPL HOURS WITH M_HOURS
-
- * define new key and zero out accumulator
- *
- SELECT A
- KEY=DEPT+EMPL_NO+CONTRACT
- M_DEPT=DEPT
- M_EMPL=EMPL_NO
- M_CONT=CONTRACT
- M_HOURS=0
- ENDDO
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1E
- *
- * Get employee names
- *
- SELECT B
- INDEX ON EMPL_NO TO &TSSF01
- SELE A
- USE &TSSEMPL INDEX &TSSENMBR
- SELE B
- SET RELATION TO EMPL_NO INTO A
- REPL ALL EMPL_NAME WITH TRIM(A->LAST_NAME)+', '+A->FIRST_NAME
- SET RELATION TO
- INDEX ON DEPT+EMPL_NAME+CONTRACT TO &TSSF01
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1F
- *
- * Generate Report Heading array for first part of report
- *
- CHAR_CNTR=1
- DO WHIL CHAR_CNTR<8
- CNTR=1
- RH_ARRAY='RA_'+STR(CHAR_CNTR,1)
- &RH_ARRAY=''
- DO WHIL CNTR<=CON_CNTR
- CHAR=SUBS(CON_LIST,(CNTR-1)*8+CHAR_CNTR+1,1)
- &RH_ARRAY=&RH_ARRAY+CHAR+' '
- CNTR=CNTR+1
- ENDD
- CHAR_CNTR=CHAR_CNTR+1
- ENDD
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1G
- *
- * Time sheet report - part A
- *
- ? 'Print-out #1 started - part A'
-
- CLOSE DATA
- CLOSE INDEX
-
- *
- * create dept summary file
- *
- SELE C
- USE &TSSF01
- COPY STRUCT TO &TSSF01D FIELDS DEPT,CONTRACT,HOURS
- USE &TSSF01D
- *
- * select department file to provide dept data
- *
- SELE B
- USE &TSSDEPT INDEX &TSSDEPT
- *
- * select main loop data file
- *
- SELE A
- USE &TSSF01 INDEX &TSSF01
- SET RELATION TO DEPT INTO B
- SET DEVICE TO PRINT
- IF P_WIDTH>132
- ? 'Printer set to condensed mode'
- @ 0,0 SAY CHR(15)
- ENDIF
- PAGE=0
- ROW=99
- GOTO TOP
- DO WHIL .NOT. EOF() && main print loop
- IF ROW>50
- DO REPT1GT
- ENDIF
- @ ROW,0 SAY '* DEPT '+DEPT+' - '+B->NAME
- CNTR=0
- DO WHIL CNTR+1<CON_CNTR && zero out contract total array
- CON_TOT='CON_'+STR(CNTR+10,2)
- &CON_TOT=0.0
- CNTR=CNTR+1
- ENDD
- ROW=ROW+1
- DEPT_KEY=DEPT
- DO WHIL DEPT=DEPT_KEY .AND. .NOT. EOF() && do a department
- IF ROW>60
- DO REPT1GT
- ENDI
- @ ROW,0 SAY EMPL_NO
- @ ROW,5 SAY EMPL_NAME
- EMPL_TOT=0.0
- CNTR=0
- EMPL_KEY=DEPT+EMPL_NO
- DO WHIL DEPT+EMPL_NO=EMPL_KEY
- CON_KEY=SUBS(CON_LIST,CNTR*8+2,7)
- CON_TOT='CON_'+STR(CNTR+10,2)
- IF CONTRACT=CON_KEY
- @ ROW,CNTR*7+24 SAY HOURS PICT '9999.9'
- EMPL_TOT=EMPL_TOT+HOURS
- &CON_TOT=&CON_TOT+HOURS
- SKIP
- CNTR=CNTR+1
- ELSE
- @ ROW,CNTR*7+24 SAY ' -'
- CNTR=CNTR+1
- ENDI
- ENDD
- DO WHIL CNTR+1<CON_CNTR
- @ ROW,CNTR*7+24 SAY ' -'
- CNTR=CNTR+1
- ENDD
- @ ROW,CNTR*7+24 SAY EMPL_TOT PICT '99999.9'
- ROW=ROW+1
- ENDD
- @ ROW,0 SAY '** DEPT TOTALS'
- *
- * place dept totals into department summary file
- *
- CNTR=0
- DEPT_TOT=0.0
- DO WHIL CNTR+1<CON_CNTR
- CON_TOT='CON_'+STR(CNTR+10,2)
- @ ROW,((CNTR*7))+24 SAY &CON_TOT PICT '9999.9'
- SELECT C
- APPEND BLANK
- REPL DEPT WITH DEPT_KEY
- REPL CONTRACT WITH SUBS(CON_LIST,CNTR*8+2,7)
- REPL HOURS WITH &CON_TOT
- SELECT A
- CNTR=CNTR+1
- DEPT_TOT=DEPT_TOT+&CON_TOT
- ENDD
- @ ROW,((CNTR*7)+24) SAY DEPT_TOT PICT '99999.9'
- ROW=ROW+2
- ENDD
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- * Time Sheet Summary report - part B
- *
- PROCEDURE REPT1H
-
- CLOSE DATA
- CLOSE INDEX
- *
- * create contract summary file
- *
- SELECT C
- USE &TSSF01
- COPY STRUCT TO &TSSF01C FIELDS CONTRACT,HOURS
- USE &TSSF01C
- *
- * select contract file
- *
- SELE B
- USE &TSSCONTR INDEX &TSSCONTR
- *
- * select dept summary file (created in part 1)
- *
- SELECT A
- USE &TSSF01D
- INDEX ON CONTRACT+DEPT TO &TSSF01
- GOTO TOP
- SET RELA TO CONTRACT INTO B
- *
- * Print report
- *
- FILLER='..............................'
- DO REPT1HT
- *
- * clear out accum array
- *
- CNTR=0
- DO WHILE CNTR+1<DEPT_CNTR
- DEPT_TOT='DEPT_'+STR(CNTR+10,2)
- &DEPT_TOT=0.0
- CNTR=CNTR+1
- ENDDO
- DO WHILE .NOT. EOF()
- CON_NAME=TRIM(B->NAME)+FILLER
- CON_NAME=SUBS(CON_NAME,1,28)
- @ ROW,0 SAY CONTRACT+' '+CON_NAME
- CON_TOT=0.0
- CNTR=0
- CON_KEY=CONTRACT
- DO WHILE CONTRACT=CON_KEY
- DEPT_KEY=SUBS(DEPT_LIST,CNTR*7+2,6)
- DEPT_TOT='DEPT_'+STR(CNTR+10,2)
- IF DEPT=DEPT_KEY
- @ ROW,CNTR*10+40 SAY HOURS PICTURE '99999.9'
- CON_TOT=CON_TOT+HOURS
- &DEPT_TOT=&DEPT_TOT+HOURS
- SKIP
- CNTR=CNTR+1
- ELSE
- @ ROW,CNTR*10+40 SAY ' -'
- CNTR=CNTR+1
- ENDIF
- ENDDO
- *
- * finish up
- *
- DO WHILE CNTR+1<DEPT_CNTR
- @ ROW,CNTR*10+40 SAY ' -'
- CNTR=CNTR+1
- ENDDO
- @ ROW,CNTR*10+40 SAY CON_TOT PICTURE '99999.9'
- @ ROW,(CNTR+1)*10+40 SAY CON_TOT/HRS_PERIOD PICTURE '9999.9'
- ROW=ROW+1
- SELECT C
- APPEND BLANK
- REPLACE CONTRACT WITH CON_KEY
- REPLACE HOURS WITH CON_TOT
- SELECT A
- ENDDO
- @ ROW,0 SAY 'TOTALS'
- CNTR=0
- CON_TOT=0.0
- DO WHILE CNTR+1<DEPT_CNTR
- DEPT_TOT='DEPT_'+STR(CNTR+10,2)
- @ ROW,CNTR*10+40 SAY &DEPT_TOT PICTURE '99999.9'
- CNTR=CNTR+1
- CON_TOT=CON_TOT+&DEPT_TOT
- ENDDO
- @ ROW,CNTR*10+40 SAY CON_TOT PICTURE '99999.9'
- @ ROW,(CNTR+1)*10+40 SAY CON_TOT/HRS_PERIOD PICTURE '9999.9'
- ROW=ROW+1
- @ ROW,0 SAY BORDER
- ROW=ROW+3
-
- SELECT C
- @ ROW,0 SAY 'TOTAL HOURS = '
- @ ROW,22 SAY CON_TOT PICTURE '99999.9'
- ROW=ROW+1
-
- TOT_PEO=CON_TOT/HRS_PERIOD
- @ ROW,0 SAY 'TOTAL PEOPLE = '
- @ ROW,22 SAY TOT_PEO PICTURE '99999.99'
- ROW=ROW+1
-
- LOCATE FOR CONTRACT='\OVERHE'
- INDR_PEO=HOURS/HRS_PERIOD
- @ ROW,0 SAY 'INDIRECT PEOPLE = '
- @ ROW,22 SAY INDR_PEO PICTURE '99999.99'
- ROW=ROW+1
-
- LOCATE FOR CONTRACT='\PROPOS'
- PROP_PEO=HOURS/HRS_PERIOD
- @ ROW,0 SAY 'PROPOSAL PEOPLE = '
- @ ROW,22 SAY PROP_PEO PICTURE '99999.99'
- ROW=ROW+1
-
- LOCATE FOR CONTRACT='\SICK'
- TOT=HOURS
- LOCATE FOR CONTRACT='\HOLIDA'
- TOT=TOT+HOURS
- LOCATE FOR CONTRACT='\VACATI'
- TOT=TOT+HOURS
- MISC_PEO=TOT/HRS_PERIOD
- @ ROW,0 SAY 'SICK, HOL, VAC. = '
- @ ROW,22 SAY MISC_PEO PICTURE '99999.99'
- ROW=ROW+1
-
- DIR_PEO=TOT_PEO - INDR_PEO - PROP_PEO - MISC_PEO
- @ ROW,0 SAY 'DIRECT PEOPLE = '
- @ ROW,22 SAY DIR_PEO PICTURE '99999.99'
- *
- * set printer back to normal mode
- *
- IF P_WIDTH>132
- @ 0,0 SAY CHR(18)
- ENDIF
- EJECT
- SET DEVICE TO SCREEN
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1GT
- *
- * Top of page routine for report # 1 part A
- *
- PAGE=PAGE+1
- @ 0,0
- HDR=CO_NAME_1
- @ 1,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- HDR=CO_NAME_2
- @ 2,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- HDR='TIME SHEET SUMMARY'
- @ 3,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- @ 4,0 SAY 'DATE PRINTED : '+DTOC(DATE())
- HDR=START+' THRU '+STOP
- @ 4,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- @ 4,P_WIDTH-10 SAY 'PAGE :'+STR(PAGE,2)
- @ 5,0 SAY BORDER
- @ 6,27 SAY RA_1
- @ 7,27 SAY RA_2
- @ 8,27 SAY RA_3
- @ 9,27 SAY RA_4
- @ 10,27 SAY RA_5
- @ 11,27 SAY RA_6
- @ 12,0 SAY 'CLK#'
- @ 12,5 SAY 'NAME'
- @ 12,27 SAY RA_7
- @ 13,0 SAY BORDER
- ROW=14
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT1HT
- *
- * Top of page routine for report #1 part B
- *
- PAGE=PAGE+1
- @ 0,0
- HDR=CO_NAME_1
- @ 1,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- HDR=CO_NAME_2
- @ 2,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- HDR='TIME SHEET SUMMARY -- FINAL PAGE'
- @ 3,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- @ 4,0 SAY 'DATE PRINTED : '+DTOC(DATE())
- HDR=START+' THRU '+STOP
- @ 5,((P_WIDTH/2)-(LEN(HDR)/2)) SAY HDR
- @ 5,P_WIDTH-10 SAY 'PAGE :'+STR(PAGE,2)
- @ 6,0 SAY BORDER
- ROW=7
- CNTR=1
- DO WHILE CNTR<DEPT_CNTR
- @ ROW,(CNTR-1)*10+40 SAY ' TOTAL'
- CNTR=CNTR+1
- ENDDO
- @ ROW,(CNTR-1)*10+40 SAY ' TOTAL'
- ROW=ROW+1
- CNTR=1
- DO WHILE CNTR<DEPT_CNTR
- @ ROW,(CNTR-1)*10+40 SAY ' DEPT.'
- CNTR=CNTR+1
- ENDDO
- @ ROW,(CNTR-1)*10+40 SAY 'CONTRACT'
- ROW=ROW+1
- CNTR=1
- DO WHILE CNTR<DEPT_CNTR
- @ ROW,(CNTR-1)*10+40 SAY SUBSTR(DEPT_LIST,(CNTR-1)*7+2,6)
- CNTR=CNTR+1
- ENDDO
- ROW=ROW+2
- @ ROW,0 SAY 'CONTRACT NUMBER'
- CNTR=1
- DO WHILE CNTR<DEPT_CNTR
- @ ROW,(CNTR-1)*10+40 SAY ' HOURS'
- CNTR=CNTR+1
- ENDDO
- @ ROW,(CNTR-1)*10+40 SAY ' HOURS EMP'
- ROW=ROW+1
- @ ROW,0 SAY BORDER
- ROW=ROW+1
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT2
- *
- * Department Charge List
- *
- CLEAR
- TEXT
- Report 2 - Department Charge List
-
- ENDTEXT
- ACCEPT 'Continue with report (Y/N)' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ENDIF
-
- * contract totaling not required because report uses phase
- ?
- ? 'Generating report .....'
- * get employee names and generate index by dept
- SELECT B
- USE &TSSF01
- ZAP
- APPEND FROM &TSSINPUT
- DO REPT1E
- CLOSE DATA
- CLOSE INDEX
-
- ? 'Report printing started....'
- * print report
- DO REPT2A
-
- CLOSE DATA
- CLOSE INDEX
- SELECT A
- DELETE FILE &TSSF01..&NDX
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT2A
- *
- * print report #2
- *
- SELECT B
- USE &TSSDEPT INDEX &TSSDEPT
- SELECT A
- USE &TSSF01 INDEX &TSSF01
- ROW=99
- PAGE=0
- SET DEVICE TO PRINT
- SELECT B
- DO WHILE .NOT. EOF()
- ? DEPT
- IF ROW>55
- DO REPT2T
- ENDIF
- @ ROW,0 SAY '* DEPT '+DEPT+' - '+NAME
- ROW=ROW+2
- DEPT_TOT=0
- DEPT_KEY=DEPT
- SELECT A
- SEEK DEPT_KEY
- IF EOF()
- @ ROW,10 SAY 'NO EMPLOYEES REPORTED FOR THIS DEPARTMENT'
- ROW=ROW+3
- @ ROW,0 SAY SUBS(BORDER,1,80)
- ROW=ROW+2
- SELECT B
- SKIP
- LOOP
- ENDIF
- DO WHILE DEPT=DEPT_KEY
- @ ROW,10 SAY EMPL_NAME
- @ ROW,40 SAY EMPL_NO
- EMPL_TOT=0
- EMPL_KEY=DEPT_KEY+EMPL_NO
- DO WHILE DEPT+EMPL_NO = EMPL_KEY .AND. .NOT. EOF()
- @ ROW,50 SAY CONTRACT
- @ ROW,70 SAY HOURS PICTURE '999.9'
- ROW=ROW+1
- EMPL_TOT=EMPL_TOT+HOURS
- IF ROW>55
- DO REPT2T
- ENDIF
- SKIP
- ENDDO
- @ ROW,70 SAY '-----'
- ROW=ROW+1
- @ ROW,50 SAY 'TOTAL HOURS'
- @ ROW,70 SAY EMPL_TOT PICTURE '999.9'
- ROW=ROW+2
- DEPT_TOT=DEPT_TOT+EMPL_TOT
- ENDDO
- @ ROW,50 SAY 'DEPT TOTAL'
- @ ROW,69 SAY DEPT_TOT PICTURE '9999.9'
- ROW=ROW+1
- @ ROW,0 SAY SUBS(BORDER,1,80)
- ROW=ROW+2
- SELECT B
- SKIP
- ENDDO
- EJECT
- SET DEVICE TO SCREEN
- CLOSE DATA
- CLOSE INDEX
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT2T
-
- PAGE=PAGE+1
- @ 0,0
- HDR=CO_NAME_1
- @ 1,(40-LEN(HDR)/2) SAY HDR
- HDR=CO_NAME_2
- @ 2,(40-LEN(HDR)/2) SAY HDR
- HDR='DEPARTMENT CHARGE LIST'
- @ 3,(40-LEN(HDR)/2) SAY HDR
- HDR=START+' THRU '+STOP
- @ 4,0 SAY 'DATE :'+DTOC(DATE())
- @ 4,(40-LEN(HDR)/2) SAY HDR
- @ 4,70 SAY 'PAGE '+STR(PAGE,3)
- ROW=6
- @ ROW,10 SAY 'EMPLOYEE NAME'
- @ ROW,40 SAY 'NMBR.'
- @ ROW,50 SAY 'CONTRACT/CHRG'
- @ ROW,70 SAY 'HOURS'
- ROW=ROW+1
- @ ROW,10 SAY '----------------------------'
- @ ROW,40 SAY '-----'
- @ ROW,50 SAY '-------------'
- @ ROW,70 SAY '-----'
- ROW=ROW+1
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT3
- *
- * Contract Charge List
- *
- CLEAR
- TEXT
- Report 3 - Contract Charge List
-
- ENDTEXT
- ACCEPT 'Continue with report (Y/N)' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ENDIF
- CLOSE DATA
- CLOSE INDEX
- BORDER3=SUBS(BORDER,1,80)
- ROW=99
- PAGE=0
- SET DEVICE TO PRINT
-
- MATCH='ACF'
- CON_LEN=7
- CON_PHASE='SUBSTR(CONTRACT,CON_LEN+2)'
- CON_NDX='SUBS(CONTRACT,1,7)+SUBS(EMPL_NAME,1,8)+SUBS(CONTRACT,9)'
- DO REPT3A
-
- MATCH='\P'
- CON_LEN=14 && full length of contract field
- CON_PHASE="' '"
- CON_NDX='CONTRACT+SUBS(EMPL_NAME,1,8)'
- DO REPT3A
-
- EJECT
- SET DEVICE TO SCREEN
- CLOSE DATA
- CLOSE INDEX
- DELETE FILE &TSSF01..&NDX
- DELETE FILE &TSSF02..&NDX
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT3A
-
- ?
- ? 'Generating Report #3A (Contracts only)'
- SELECT A
- USE &TSSF02
- ZAP
- APPEND FROM &TSSINPUT FOR SUBS(CONTRACT,1,1)$MATCH
-
- * get employee names
- *
- SELECT B
- USE &TSSEMPL INDEX &TSSENMBR
-
- SELECT A
- SET RELATION TO EMPL_NO INTO B
- REPLACE ALL EMPL_NAME WITH TRIM(B->LAST_NAME)+', '+B->FIRST_NAME
- SET RELATION TO
- INDEX ON &CON_NDX TO &TSSF02
- SELECT B
- USE &TSSCONTR INDEX &TSSCONTR
- SELECT A
- ? 'Report printout started.....'
- SET RELATION TO SUBSTR(CONTRACT,1,CON_LEN) INTO B
- CON_HDR=' '
- GOTO TOP
- DO WHILE .NOT. EOF()
- CON_HDR=SUBS(CONTRACT,1,CON_LEN)+' - '+TRIM(B->NAME)+' : '+TRIM(B->HEAD)
- IF ROW>50
- DO REPT3T
- ELSE
- @ ROW,0 SAY CON_HDR
- ROW=ROW+2
- ENDIF
- CON_TOT=0
- CON_KEY=SUBS(CONTRACT,1,CON_LEN)
- DO WHILE .T. && CONTRACT=CON_KEY
- @ ROW,10 SAY EMPL_NAME
- @ ROW,40 SAY EMPL_NO
- EMPL_KEY=SUBS(CONTRACT,1,CON_LEN)+EMPL_NO
- DO WHILE SUBS(CONTRACT,1,CON_LEN)+EMPL_NO=EMPL_KEY
- @ ROW,50 SAY &CON_PHASE
- @ ROW,70 SAY HOURS PICTURE '999.9'
- ROW=ROW+1
- CON_TOT=CON_TOT+HOURS
- SKIP
- ENDDO
- IF SUBS(CONTRACT,1,CON_LEN) # CON_KEY
- @ ROW,60 SAY 'TOTAL'
- @ ROW,69 SAY CON_TOT PICTURE '9999.9'
- ROW=ROW+1
- @ ROW,0 SAY BORDER3
- ROW=ROW+2
- EXIT
- ELSE
- IF ROW>54
- DO REPT3T
- ENDIF
- ENDIF
- ENDDO
- ENDDO
-
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT3T
- PAGE=PAGE+1
- @ 0,0
- HDR=CO_NAME_1
- @ 1,(40-LEN(HDR)/2) SAY HDR
- HDR=CO_NAME_2
- @ 2,(40-LEN(HDR)/2) SAY HDR
- HDR='CONTRACT CHARGE LIST'
- @ 3,(40-LEN(HDR)/2) SAY HDR
- @ 4,0 SAY 'DATE :'+DTOC(DATE())
- HDR=START+' THRU '+STOP
- @ 4,40-LEN(HDR)/2 SAY HDR
- @ 4,70 SAY 'PAGE '+STR(PAGE,3)
- @ 6,10 SAY 'EMPLOYEE NAME'
- @ 6,40 SAY 'NMBR.'
- @ 6,50 SAY 'PHASE'
- @ 6,70 SAY 'HOURS'
- @ 7,0 SAY BORDER3
- @ 8,0 SAY CON_HDR
- ROW=9
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT4
- *
- * Employee Charge List
- *
-
- CLEAR
- TEXT
- Report 4 - Employee Charge List
-
- ENDTEXT
- ACCEPT 'Continue with report (Y/N)' TO REPLY
- REPLY=UPPER(REPLY)
- IF REPLY#'Y'
- RETURN
- ENDIF
- ?
- ? 'Generating Report #4...'
- SELECT B
- USE &TSSF02
- ZAP
- APPEND FROM &TSSINPUT
-
- * get employee names
- DO REPT1E
-
- CLOSE DATA
- CLOSE INDEX
-
- SELECT A
- USE &TSSF02
- INDEX ON SUBS(EMPL_NAME,1,16)+DEPT+CONTRACT TO &TSSF02
-
- ? 'Report printout started.....'
-
- ROW=99
- PAGE=0
- SET DEVICE TO PRINT
- SELECT A
- GOTO TOP
- DO WHILE .NOT. EOF()
- IF ROW>55
- DO REPT4T
- ENDIF
- @ ROW,0 SAY EMPL_NAME
- @ ROW,30 SAY EMPL_NO
- EMPL_TOT=0
- EMPL_KEY=EMPL_NAME
- DO WHILE EMPL_NAME = EMPL_KEY .AND. .NOT. EOF()
- @ ROW,40 SAY DEPT
- @ ROW,50 SAY CONTRACT
- @ ROW,70 SAY HOURS PICTURE '999.9'
- EMPL_TOT=EMPL_TOT+HOURS
- ROW=ROW+1
- IF ROW>55
- DO REPT4T
- ENDIF
- SKIP
- ENDDO
- @ ROW,60 SAY 'TOTAL'
- @ ROW,69 SAY EMPL_TOT PICTURE '9999.9'
- ROW=ROW+1
- @ ROW,0 SAY SUBS(BORDER,1,80)
- ROW=ROW+2
- ENDDO
- EJECT
-
- SET DEVICE TO SCREEN
- CLOSE DATA
- CLOSE INDEX
- DELETE FILE &TSSF01..&NDX
- DELETE FILE &TSSF02..&NDX
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- PROCEDURE REPT4T
- PAGE=PAGE+1
- @ 0,0
- HDR=CO_NAME_1
- @ 1,(40-LEN(HDR)/2) SAY HDR
- HDR=CO_NAME_2
- @ 2,(40-LEN(HDR)/2) SAY HDR
- HDR='EMPLOYEE CHARGE LIST'
- @ 3,(40-LEN(HDR)/2) SAY HDR
- @ 4,0 SAY 'DATE :'+DTOC(DATE())
- HDR=START+' THRU '+STOP
- @ 4,40-LEN(HDR)/2 SAY HDR
- @ 4,70 SAY 'PAGE '+STR(PAGE,3)
- @ 6,10 SAY 'EMPLOYEE NAME'
- @ 6,30 SAY 'NMBR.'
- @ 6,40 SAY 'DEPT.'
- @ 6,50 SAY 'CONTRACT'
- @ 6,70 SAY 'HOURS'
- @ 7,0 SAY SUBS(BORDER,1,80)
- ROW=8
- RETURN
- *
- *****************************************************************************
- *****************************************************************************
- *
- * END OF PROCEDURE FILE - TSSREPT.PRG
- *
- *****************************************************************************